2023/12/233988字符
Object
var mrDeng = {
name : "MrDeng",
age : 40,
sex : "male",
health : 100,
smoke : function(){
var str = 'I am smoking ! cool!!!'
this.health --;
console.log(str + this.health);
},
drink : function(){
var str = 'I am drink'
this.health ++;
console.log(str + this.health);
}
}
- 增:mrDeng.wife = "xiaoliu";
- 删:delete mrDeng.sex;
- 改:mrDeng.sex = "female";
- 查:console.log(mrDeng.sex);
创建对象方法
- var obj = {} plainObject 对象字面量/对象直接量
- 构造函数
- 系统自带的构造函数 new Object()
var obj = new Object();
obj.name = 'abc';
obj.sex = 'female';
obj.say = function(){}
- 自定义
function Car(){
this.name = "BMW";
this.height = 1400;
this.lang = 4900;
this.health = 100;
this.run = function(){
this.health --;
}
}
var car1 = new Car();
var car2 = new Car();
car1.name = "Infiniti";
对象拷贝
浅层克隆
只拷贝,两个对象指向同一个地址,改变非原始值另一个对象也会跟着改变
var obj = {
name : 'abc',
age : 123,
sex : 'female'
}
var obj1 = {}
// 封装 clone 方法
function clone(origin, target){
var target = target || {};
for(var prop in origin){
target[prop] = origin[prop];
}
return target;
}
clone(obj, obj1);
深度克隆
两个对象指向两个地址
var obj = {
name : "abc",
age : 123,
card : ['vise', 'mastar'],
wife : {
name : "bcd",
son : "aaa"
}
}
var obj1 = {}
// 封装 deepClone 方法
function deepClone(origin, target){
var target = target || {};
toStr = Object.prototype.toString,
arrStr = "[object Array]";
for (var prop in origin) {
if (origin.hasOwnProperty(prop)) { // 判断自身属性是否存在
if (typeof(origin[prop]) !== 'null' && typeof(origin[prop]) === 'object') {
target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {};
deepClone(origin[prop],target[prop]);
} else {
target[prop] = origin[prop];
}
}
}
}
deepClone(obj, obj1);
对象枚举
for in
var arr = [1,2,3,4,5,6,7,8,9];
// 遍历 枚举
for (var i = 0; i < arr.length; i ++) {
console.log(arr[i]);
}
in, hasOwnProperty
var obj = {
name : "wang",
age : 18,
sex : "male",
height : 180,
width : 45,
__proto__ : {
lastName : "deng"
}
}
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) { // .hasOwnProperty() 排除原型
console.log(obj[prop]);
// obj.prop == obj['prop'] != obj[prop]
}
}
in (不分青红皂白,会访问到父级) hasOwnProperty (只访问自己)
instanceof
function Person(){}
var person = new Person();
var obj = {}
person instanceof Person //--> true 看 person 对象的原型链上有没有 Person 的原型
person instanceof Object //--> true
person instanceof Array //--> false
obj instanceof Person //--> false
toString.call
Object.prototype.toString.call([]); //--> [Object Array]
Object.prototype.toString.call(123); //--> [Object Number]
Object.prototype.toString.call({}); //--> [Object Object]
Object.prototype.toString.call(null); //--> [Object Null]
区别数组和对象的三种方法 .canstrutor .instanceof .toString.call()
对象中的键值遍历规律
- 先按数字排序,后按书写顺序排序(方便运算,方便定位内存地址,提高运行效率)
const obj = {
p2: 'aaa',
1: 'aaa',
2: 'aaa',
p1: 'aaa'
}
for (var key in obj) {
console.log(key); //--> 1 2 p2 p1
}